#ifndef ENTITYMANAGER_H
#define ENTITYMANAGER_H


#pragma warning (disable:4786)
//------------------------------------------------------------------------
//
//  Name:   EntityManager.h
//
//  Desc:   Singleton class to handle the  management of Entities.          
//
//  Author: Mat Buckland 2002 (fup@ai-junkie.com)
//
//------------------------------------------------------------------------
#include <map>

#include <string>
#include "LibraryFrameworkExport.h"
#include "Singleton.h"


namespace CasaEngine
{
	class BaseEntity;

	//provide easy access
	#define EntityMgr EntityManager::Instance()

	/*
	 *	
	 */
	class LIBRARY_FRAMEWORK_EXPORT EntityManager : 
		public CSingleton<EntityManager>
	{
	MAKE_SINGLETON(EntityManager)

	private:

	  typedef std::map<int, BaseEntity*> EntityMap;

	private:

	  //to facilitate quick lookup the entities are stored in a std::map, in which
	  //pointers to entities are cross referenced by their identifying number
	  EntityMap m_EntityMap;

	public:

	  //static EntityManager* Instance();

	  //this method stores a pointer to the entity in the std::vector
	  //m_Entities at the index position indicated by the entity's ID
	  //(makes for faster access)
	  void RegisterEntity(BaseEntity* NewEntity);

	  //returns a pointer to the entity with the ID given as a parameter
	  BaseEntity* GetEntityFromID(int id)const;

	  //this method removes the entity from the list
	  void RemoveEntity(BaseEntity* pEntity);
	};

} // namespace CasaEngine

#endif // ENTITYMANAGER_H